public class MoverComoAlfil implements MoverDiagonal {	

	public void movimientoDiagonal(Tablero tablero, Pieza pieza, int filaDestino, String columnaDestino) {
		
		if(pieza.diferenciaFila(filaDestino)==tablero.diferenciaColumna(pieza, columnaDestino)){ // si la diferenciaFila es igual a diferenciaColumna
			if(pieza.diferenciaFila(filaDestino)>0){ // si la diferencia es mayor a cero 	
				int filaAdelante=pieza.getFila()+1;
				int columnaAdelante=tablero.traducirColumna(pieza.getColumna())+1;
				
				while(filaDestino>=filaAdelante){ // mientras filaDestino sea mayor o igual a filaAdelante
					while(tablero.traducirColumna(columnaDestino)>=columnaAdelante){ // mientras columnaDestino sea mayor o igual a columnaAdelante
						
						if(tablero.traducirColumna(columnaDestino)!=columnaAdelante && tablero.estaVacio(filaAdelante, columnaAdelante)==true){ // si la columnaDestino es difetente a columnaAdelante y el casillero esta vacio
							columnaAdelante++;
							filaAdelante++;
						}
						else if(tablero.traducirColumna(columnaDestino)==columnaAdelante){ // si columnaDestino es igual a columnaAdelante (llegue al casillero destino)
							System.out.println(pieza.detectarMovimiento(filaDestino,columnaDestino));
							tablero.mover(pieza, filaDestino, columnaDestino);
							break;
						}
						else{
							System.out.println(pieza.detectarObstaculos());
							break;
						}
					}
					break;
				}
			}
				
			else if(pieza.diferenciaFila(filaDestino)<0){ // si la diferencia es menor a cero
				
				int filaAdelante=pieza.getFila()-1;
				int columnaAdelante=tablero.traducirColumna(pieza.getColumna())-1;
				
				while(filaDestino<=filaAdelante){ // mientras filaDestino sea menor o igual a filaAdelante
					while(tablero.traducirColumna(columnaDestino)<=columnaAdelante){ // mientras columnaDestino sea menor o igual a columnaAdelante
						
						if(tablero.traducirColumna(columnaDestino)!=columnaAdelante && tablero.estaVacio(filaAdelante, columnaAdelante)==true){ // si columnaDestino es diferente a columnaAdelante y el casillero esta vacio
							columnaAdelante--;
							filaAdelante--;
						}
						else if(tablero.traducirColumna(columnaDestino)==columnaAdelante){ // si columnaDestino es igual a columnaAdelante (llegue al casillero destino)
							System.out.println(pieza.detectarMovimiento(filaDestino,columnaDestino));
							tablero.mover(pieza, filaDestino, columnaDestino);
							break;
						}
						else{
							System.out.println(pieza.detectarObstaculos());
							break;
						}
					}
					break;
				}
			}
			else{ // si la diferencia es igual a cero
				System.out.println("movimiento incorrecto, la pieza no se movio");
			}
		}
		else if(pieza.diferenciaFila(filaDestino)!=tablero.diferenciaColumna(pieza, columnaDestino)){
			if(pieza.diferenciaFila(filaDestino)>=1 && tablero.diferenciaColumna(pieza, columnaDestino)<=-1){
				
				int filaAdelante=pieza.getFila()+1;
				int columnaAdelante=tablero.traducirColumna(pieza.getColumna())-1;
				
				while(filaDestino>=filaAdelante){ // mientras filaDestino sea mayor o igual a filaAdelante
					while(tablero.traducirColumna(columnaDestino)<=columnaAdelante){ // mientras columnaDestino sea menor o igual a columnaAdelante
						
						if(tablero.traducirColumna(columnaDestino)!=columnaAdelante && tablero.estaVacio(filaAdelante, columnaAdelante)==true){ // si columnaDestino es diferente a columnaAdelante y el casillero esta vacio
							columnaAdelante--;
							filaAdelante++;
						}
						else if(tablero.traducirColumna(columnaDestino)==columnaAdelante){ // si columnaDestino es igual a columnaAdelante (llegue al casillero destino)
							System.out.println(pieza.detectarMovimiento(filaDestino,columnaDestino));
							tablero.mover(pieza, filaDestino, columnaDestino);
							break;
						}
						else{
							System.out.println(pieza.detectarObstaculos());
							break;
						}
					}
					break;
				}
				
			}
			else if(pieza.diferenciaFila(filaDestino)<=-1 && tablero.diferenciaColumna(pieza, columnaDestino)>=1){
				
				int filaAdelante=pieza.getFila()-1;
				int columnaAdelante=tablero.traducirColumna(pieza.getColumna())+1;
				
				while(filaDestino<=filaAdelante){ // mientras filaDestino sea menor o igual a filaAdelante
					while(tablero.traducirColumna(columnaDestino)>=columnaAdelante){ // mientras columnaDestino sea mayor o igual a columnaAdelante
						
						if(tablero.traducirColumna(columnaDestino)!=columnaAdelante && tablero.estaVacio(filaAdelante, columnaAdelante)==true){ // si columnaDestino es diferente a columnaAdelante y el casillero esta vacio
							columnaAdelante++;
							filaAdelante--;
						}
						else if(tablero.traducirColumna(columnaDestino)==columnaAdelante){ // si columnaDestino es igual a columnaAdelante (llegue al casillero destino)
							System.out.println(pieza.detectarMovimiento(filaDestino,columnaDestino));
							tablero.mover(pieza, filaDestino, columnaDestino);
							break;
						}
						else{
							System.out.println(pieza.detectarObstaculos());
							break;
						}
					}
					break;
				}
				
			}
			else{
				System.out.println("movimiento incorrecto, error de movimiento");
			}
		}
	}
}
